Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [RISOLTO] Problemino con inportb(0x60) per MudStorm OS
Forum - C/C++ - [RISOLTO] Problemino con inportb(0x60) per MudStorm OS

Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 23:38
Lunedì, 25/02/2013
Salve a tutti, in questi giorni sto implementando un paio di cose al mio piccolo Kernel, ed una di queste è la gestione degli input da Tastiera, con inportb(0x60), e ho un problema!

Non riesco a capire dove si trovano i codici di scancode!

Cioè sono riuscito a trovare quelli per la "a, z, j, m", ma gli altri? Ho tentato anche di usare "showkey --a" per vedere i codici usati da Ubuntu, ma usando i suoi codici non esce nulla!

Esempio:
- Codice che funziona: 44 = z
- Codice di ubuntu(non funziona): 122 = z

Ecco il mio codice:

Codice sorgente - presumibilmente C/C++

  1. while(1) /* qui metterei while(!(inportb(0x60) == Tasto_Enter)), ditemi se sbaglio */
  2. {
  3.            if (inportb (0x60) == 44)
  4.            cout("z");
  5. }



Grazie per il vs. aiuto! :k:

Ultima modifica effettuata da LittleHacker il 26/02/2013 alle 18:56
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 15:31
Martedì, 26/02/2013
0x2C, che sarebbe 44 in decimale, è lo scancode del tasto Z su alcuni modelli di tastiera (come quella italiana).

http://philipstorr.id.au/pcbook/book3/scancode.htm

La gestione dello scancode deve poi passare da una tabella di conversione per assegnare ad ogni codice il corretto carattere ASCII associato al layout di tastiera.

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:55
Martedì, 26/02/2013
Testo quotato

Postato originariamente da TheKaneB:

0x2C, che sarebbe 44 in decimale, è lo scancode del tasto Z su alcuni modelli di tastiera (come quella italiana).

http://philipstorr.id.au/pcbook/book3/scancode.htm

La gestione dello scancode deve poi passare da una tabella di conversione per assegnare ad ogni codice il corretto carattere ASCII associato al layout di tastiera.



Ok, grazie!

Ho scritto troppo in fretta RISOLTO :D
Ho un altro problema, cioè con quel codice, se pigio "a" e poi "invio", a schermo si visualizzano 50 "a" al posto di 1! Non è un problema dell'strcat, allora ho fatto così, sotto il while ho messo un if con:

Codice sorgente - presumibilmente C/C++

  1. if (inportb(0x60) & 128) == 128)
  2. {
  3. //Pulsante rilasciato, faccio tutti i miei if
  4. }



Ma usando questo codice fa fatica a captarmi il pulsante, cioè se premo 3 volte "a", lui me ne scrive soltanto una!
Come posso fare per farmi riconoscere bene gli input?

Un'altra domanda, come faccio a scrivere direttamente a video le lettere, senza dover prima pigare INVIO?

Grazie ancora :k:

Edit:

Il problema delle troppe lettere ho risolto usando questo codice:
Codice sorgente - presumibilmente C/C++

  1. while(KEY != KEY_ENTER)
  2. {
  3. if ((KEY & 128) == 0)
  4. {
  5. //Faccio i miei controlli
  6. }
  7. while((KEY & 128) == 0);
  8. }



Però per la feature "scrivere direttamente a video le lettere", non so cosa fare! Però ho letto che usando questo codice, la CPU resta occupata e può fare solo quello, giusto? Potete darmi una mano?
Grazie :k:

Ultima modifica effettuata da LittleHacker il 03/03/2013 alle 17:21
PM Quote